import Vue from 'vue'
import store from '@/store'
import axios from 'axios'
import router from '../router';

const Vm = new Vue({})
const service = axios.create({
  // baseURL: baseURL, // 本地环境和开发环境都已设置方向代理
  timeout: 20000 // 请求超时时间
})
service.interceptors.request.use(
  config => {
    const loginMsg = sessionStorage.getItem('loginMsg') || '{}'
    const token = JSON.parse(loginMsg).token
    const expire = JSON.parse(loginMsg).expire
    if (token && expire) {
      config.headers.token = token
      config.headers.expire = expire
    }
    if (config.method === 'post') { // 设置参数拼接方式
      let params = null
      if (config.isFromData) {
        params = new FormData()
        for (const key in config.data) {
          params.append(key, config.data[key])
        }
      } else {
        config.headers['Content-Type'] = 'application/json'
        params = JSON.stringify(config.data)
      }
      config.data = params
      
    } else {
      config.url = `${config.url}?${Vm.qs.stringify(config.data)}`
    }
    return config
  }
)
service.interceptors.response.use(
  res => {
    const data = res.data
    if (data.success) {
      return data
    } else {
      if (data.errorCode && data.errorCode == 'SC_UNAUTHORIZED') {
        sessionStorage.removeItem('loginMsg')
        store.commit('set_LoginInfo', {})
        Vm.$message({ type: 'error', message: res.data.errorMsg || '登录已过期，请重新登录！' })
        router.replace('/main/login')
        return false
      } else {
        if (!res.data.success) Vm.$message.error(res.data.errorMsg || '请求错误')
        return res
      }
    }
  },
  error => {
    const _error = error.config
    if (error.code == 'ECONNABORTED' && error.message.indexOf('timeout') != -1 && !_error._retry) {
      Vm.$message.error('请求超时！')
      return Promise.reject({'timeout': error.message})
    } else {
      Vm.$message.error( '服务器未响应！')
      return Promise.reject({'state': {'errorMsg': error.response.data, 'state': error.response.status}})
    }
  }
)
export default service
